package net.aaa.hotel.controller;

import net.aaa.hotel.dao.HTypeDao;
import net.aaa.hotel.dao.ITorderDao;
import net.aaa.hotel.dao.T_sheshiDao;
import net.aaa.hotel.entity.TOrder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
public class FrontIndexController {
    @Autowired
    private HTypeDao hTypeDao;
    @Autowired
    private T_sheshiDao sheshiDao;
    @Autowired
    private ITorderDao orderDao;

    @RequestMapping("index")
    public ModelAndView index() {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("typeList", hTypeDao.queryAllInfo());
        modelAndView.setViewName("front/index");
        return modelAndView;
    }

    @RequestMapping("findTypeById")
    @ResponseBody
    public Map getTYpeListById(Integer typeid){
        Map map = hTypeDao.searchType(typeid + "");
        // 获得对应设施的表应该放在哪个dao中
        // 获得到对应的设施后 应该对获得到的数据进行处理的到对应的设施列表  设施表 getTypeSheshi
        Map msg = new HashMap();
        msg.put("typeMess",map);
        List sheshi = sheshiDao.getSheshiByRoomType(typeid);
        msg.put("sheshiMess",sheshi);
        //获取订房的时间
        List l=hTypeDao.getManDate(typeid);
        if(l.size()>0){
            //生成当前时间和 最大的订房时间之间的时间段
            Date date=new Date();
            String format = new SimpleDateFormat("yyyy-MM-dd").format(date);
            hTypeDao.getNowAndMaxBetweenTime(format,l.get(0)+"");
            //查询这个时间段之内的所有的时间
            List<Map> mapList=hTypeDao.getAllDate();
            //查询这个时间段之内每天预定的房间数  以及已满的时间
            Map allList=hTypeDao.getDateOrder(mapList,typeid);
            //将信息存到map里面然后返回个前台
            msg.put("orderMess",allList);
        }else{
            //如果为空就证明还没有于预定过房间
            System.out.println("所有房间都未预定");
        }
        return msg;
    }

    @RequestMapping("addOrder")
    @ResponseBody
    public String addOrder(TOrder order){
        // System.out.println(order);
        //根据预定的入住时间和离开时间  获取这中间的日期
        // 在内部调用的只有order.getRzdate() order.getLeavedate()
        orderDao.getDate(order);
        //根据插入的时间查询当前的房间
        List<Map> mapList=hTypeDao.getAllDate();
        //查询这个时间段之内每天预定的房间数  以及已满的房间数
        Map allList=hTypeDao.getDateOrder(mapList,order.getRoomtype());
        //如果预定的房间数大于这个剩余的房间数的最小值 就 不能预定成功
        List<Map> mapsDate  = (List<Map>)allList.get("srDate");//[{date1:1},{date2:2}]
        boolean f=true;
        for (Map map : mapsDate) {
            //map里面存放的格式是  时间:数量（剩余的房间的数量）
            for (Object o : map.keySet()) {
                //o是时间
                int synum = Integer.parseInt(map.get(o)+"");
                //对比一下当前预定的数量是否>剩余的数量  如果大于就直接return 0 （不能预定）
                if(order.getCount()>synum){
                    //return "0";
                    f=false;//不能预定了
                }
            }
        }
        if(f){
            //将数据添加刀数据库里面
            int i=orderDao.addOrder(order);
            return "1";
        }else{
            //不能预定了
            return "0";
        }
    }
}
